package com.sg.dto.integration.app;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * @desc TargetObjDto
 * @使用场景
 */
@Data
public class TargetObjDto extends BaseDto implements Serializable {

    /**
     * 关联末级目标分类ID
     */
    @ApiModelProperty("关联末级目标分类ID")
    private String correlationLastTargetCatId;

    /**
     * 归属父级指标ID
     */
    @ApiModelProperty("归属父级指标ID")
    private String parentObjectiveId;

    /**
     * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
     */
    @ApiModelProperty("冗余指标业务类型")
    private String targetValueType;

    /**
     * 冗余是否左侧比例型 TRUE:是 FALSE:否
     */
    @ApiModelProperty("冗余是否左侧比例型")
    private String isLeft;

    /**
     * 指标ID
     */
    @ApiModelProperty("指标ID")
    private String objectiveId;

    /**
     * 指标标识
     */
    @ApiModelProperty("指标标识")
    private String objectiveCode;

    /**
     * 指标名称
     */
    @ApiModelProperty("指标名称")
    private String objectiveName;

    /**
     * 指标简称
     */
    @ApiModelProperty("指标简称")
    private String objectiveShortName;

    /**
     * 指标模板ID
     */
    @ApiModelProperty("指标模板ID")
    private String objectiveTemplateId;

    /**
     * 指标模板名称
     */
    @ApiModelProperty("指标模板名称")
    private String objectiveTemplateName;

    /**
     * 冗余数字单位
     */
    @ApiModelProperty("冗余数字单位")
    private Double digitalUnit;

    /**
     * 冗余单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
     */
    @ApiModelProperty("冗余单位")
    private String unit;

    /**
     * 层级
     */
    @ApiModelProperty("层级")
    private Long levelNumber;

    /**
     * 被评对象目标周期ID
     */
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @ApiModelProperty("周期模式类型编码")
    private String periodicModeTypeCode;

    /**
     * 虚拟组织下部门ID
     */
    @ApiModelProperty("虚拟组织下部门ID")
    private String deptId;

    /**
     * 组织内部门身份名称
     */
    @ApiModelProperty("组织内部门身份名称")
    private String virtualOrgDeptStatus;

    /**
     * 虚拟组织成员就职记录ID
     */
    @ApiModelProperty("虚拟组织成员就职记录ID")
    private String virtualOrgInductionRecordId;

    /**
     * 组内职务名称
     */
    @ApiModelProperty("组内职务名称")
    private String virtualOrganizationPosition;

    /**
     * 负责人就职记录ID
     */
    @ApiModelProperty("负责人就职记录ID")
    private String principalInductionRecordId;

    /**
     * 负责人组内职务名称
     */
    @ApiModelProperty("负责人组内职务名称")
    private String principalVirtualOrganizationPosition;

    /**
     * 主管就职记录ID
     */
    @ApiModelProperty("主管就职记录ID")
    private String directorInductionRecordId;

    /**
     * 主管组内职务名称
     */
    @ApiModelProperty("主管组内职务名称")
    private String directorVirtualOrganizationPosition;

    /**
     * 责任主体ID
     */
    @ApiModelProperty("责任主体ID ")
    private String dutyBodyId;

    /**
     * 责任主体名称
     */
    @ApiModelProperty("责任主体名称 ")
    private String dutyBodyName;

    /**
     * 冗余一级目标分类ID
     */
    @ApiModelProperty("冗余一级目标分类ID")
    private String rootTargetCategoryId;

    /**
     * 冗余指标模板类型 QUALITATIVE:定性 RATION:定量
     */
    @ApiModelProperty("冗余指标模板类型")
    private String objectiveType;

    /**
     * 系统对接计算类型 CALCULATE:计算实际值 SCORE_AFTER_CALCULATE:计算实际值得分
     */
    @ApiModelProperty("系统对接计算类型")
    private String systemDocking;

    /**
     * 是否引用指标 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否引用指标")
    private String isReference;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Long orderNumber;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;

    /**
     * 批次下更新状态 NEW:本次新增 UNCHANGED:正常未变 REVISION:本次修订 ARCHIVE:本次存档
     */
    @ApiModelProperty("批次下更新状态")
    private String updateStatus;

    /**
     * 是否向下分工 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否向下分工")
    private String createLowerIndicator;

    /**
     * 负责人虚拟组织成员ID
     */
    @ApiModelProperty("负责人虚拟组织成员ID")
    private String principalVirtualOrgMemberId;

    /**
     * 主管虚拟组织成员ID
     */
    @ApiModelProperty("主管虚拟组织成员ID")
    private String directorVirtualOrgMemberId;

    /**
     * 是否已完成 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否已完成")
    private String isComplete;

    /**
     * 存档类型 NOT_ARCHIVE:未归档 TOBE_ARCHIVING:想归档 ARCHIVED:已归档
     */
    @ApiModelProperty("存档类型")
    private String archivngType;

    /**
     * 个人账号
     */
    @ApiModelProperty("个人账号")
    private String userId;

    /**
     * 目标周期简称
     */
    @ApiModelProperty("目标周期简称")
    private String cyclelAlias;

    /**
     * 目标周期名称
     */
    @ApiModelProperty("目标周期名称")
    private String targetCycleName;

    /**
     * 责任主体类型 PERSONAL:个人 DEPT:部门
     */
    @ApiModelProperty("责任主体类型")
    private String respBodyType;

    /**
     * 指标编号
     */
    @ApiModelProperty("指标编号")
    private String objectiveNumber;

    /**
     * 是否末级指标 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否末级指标")
    private String isLastObjective;

    /**
     * 冗余目标ID
     */
    @ApiModelProperty("冗余目标ID")
    private String targetId;

    /**
     * 是否用于一级部门 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否用于一级部门")
    private String isUseFirstDept;

    /**
     * 指标汇报对象设置项编码 PRIMARY_TASK:一级建设任务 SECONDARY_TASK:二级建设任务 PRIMARY_OBSERVATION_POINT:二级以下建设任务或一级观测点 SECONDARY_OBSERVATION_POINT:二级观测点 OTHER_OBSERVATION_POINT:二级以下观测点
     */
    @ApiModelProperty("指标汇报对象设置项编码")
    private String reportObjectSetCode;

    /**
     * 虚拟组织ID
     */
    @ApiModelProperty("虚拟组织ID")
    private String virtualOrgId;

    /**
     * 是否开启自定义汇报 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启自定义汇报")
    private String isOpenCustomReport;

    /**
     * 诊断值
     */
    @ApiModelProperty("诊断值")
    private Double targetDiagnosticValue;

    /**
     * 权重分值
     */
    @ApiModelProperty("权重分值")
    private Double weightScore;

    /**
     * 权重
     */
    @ApiModelProperty("权重")
    private Double weightValue;

    /**
     * 归属父级目标分类ID
     */
    @ApiModelProperty("归属父级目标分类ID")
    private String parentTargetCategoryId;

    /**
     * 分管领导就职记录ID
     */
    @ApiModelProperty("分管领导就职记录ID")
    private String deptLeaderInductionRecordId;

    /**
     * 分管领导组内名称
     */
    @ApiModelProperty("分管领导组内名称")
    private String deptLeaderVirtualOrganizationPosition;

    /**
     * 冗余评价模板ID
     */
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;

    /**
     * 个人排序
     */
    @ApiModelProperty("个人排序")
    private Long personalOrderNumber;

    /**
     * 操作时间
     */
    @ApiModelProperty("操作时间")
    private Date operateTime;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 是否开启预算 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启预算")
    private String isUseBudget;

    /**
     * 目标计划开始时间
     */
    @ApiModelProperty("目标计划开始时间")
    private Date cycleStartTime;

    /**
     * 目标计划结束时间
     */
    @ApiModelProperty("目标计划结束时间")
    private Date cycleEndTime;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        TargetObjDto that = (TargetObjDto) o;
        return (
                correlationLastTargetCatId == that.correlationLastTargetCatId &&
                        parentObjectiveId == that.parentObjectiveId &&
                        targetValueType == that.targetValueType &&
                        isLeft == that.isLeft &&
                        objectiveId == that.objectiveId &&
                        objectiveCode == that.objectiveCode &&
                        objectiveName == that.objectiveName &&
                        objectiveShortName == that.objectiveShortName &&
                        objectiveTemplateId == that.objectiveTemplateId &&
                        objectiveTemplateName == that.objectiveTemplateName &&
                        digitalUnit == that.digitalUnit &&
                        unit == that.unit &&
                        levelNumber == that.levelNumber &&
                        evaObjTargetCycleId == that.evaObjTargetCycleId &&
                        periodicModeTypeCode == that.periodicModeTypeCode &&
                        deptId == that.deptId &&
                        virtualOrgDeptStatus == that.virtualOrgDeptStatus &&
                        virtualOrgInductionRecordId == that.virtualOrgInductionRecordId &&
                        virtualOrganizationPosition == that.virtualOrganizationPosition &&
                        principalInductionRecordId == that.principalInductionRecordId &&
                        principalVirtualOrganizationPosition ==
                                that.principalVirtualOrganizationPosition &&
                        directorInductionRecordId == that.directorInductionRecordId &&
                        directorVirtualOrganizationPosition ==
                                that.directorVirtualOrganizationPosition &&
                        dutyBodyId == that.dutyBodyId &&
                        dutyBodyName == that.dutyBodyName &&
                        rootTargetCategoryId == that.rootTargetCategoryId &&
                        objectiveType == that.objectiveType &&
                        systemDocking == that.systemDocking &&
                        isReference == that.isReference &&
                        orderNumber == that.orderNumber &&
                        subjectLifeCycle == that.subjectLifeCycle &&
                        updateStatus == that.updateStatus &&
                        createLowerIndicator == that.createLowerIndicator &&
                        principalVirtualOrgMemberId == that.principalVirtualOrgMemberId &&
                        directorVirtualOrgMemberId == that.directorVirtualOrgMemberId &&
                        isComplete == that.isComplete &&
                        archivngType == that.archivngType &&
                        userId == that.userId &&
                        cyclelAlias == that.cyclelAlias &&
                        targetCycleName == that.targetCycleName &&
                        respBodyType == that.respBodyType &&
                        objectiveNumber == that.objectiveNumber &&
                        isLastObjective == that.isLastObjective &&
                        targetId == that.targetId &&
                        isUseFirstDept == that.isUseFirstDept &&
                        reportObjectSetCode == that.reportObjectSetCode &&
                        virtualOrgId == that.virtualOrgId &&
                        isOpenCustomReport == that.isOpenCustomReport &&
                        targetDiagnosticValue == that.targetDiagnosticValue &&
                        weightScore == that.weightScore &&
                        weightValue == that.weightValue &&
                        parentTargetCategoryId == that.parentTargetCategoryId &&
                        deptLeaderInductionRecordId == that.deptLeaderInductionRecordId &&
                        deptLeaderVirtualOrganizationPosition ==
                                that.deptLeaderVirtualOrganizationPosition &&
                        evaluationTemplateId == that.evaluationTemplateId &&
                        personalOrderNumber == that.personalOrderNumber &&
                        operateTime == that.operateTime &&
                        createTime == that.createTime &&
                        isUseBudget == that.isUseBudget &&
                        cycleStartTime == that.cycleStartTime &&
                        cycleEndTime == that.cycleEndTime
        );
    }

    @Override
    public int hashCode() {
        return Objects.hash(
                super.hashCode(),
                correlationLastTargetCatId,
                parentObjectiveId,
                targetValueType,
                isLeft,
                objectiveId,
                objectiveCode,
                objectiveName,
                objectiveShortName,
                objectiveTemplateId,
                objectiveTemplateName,
                digitalUnit,
                unit,
                levelNumber,
                evaObjTargetCycleId,
                periodicModeTypeCode,
                deptId,
                virtualOrgDeptStatus,
                virtualOrgInductionRecordId,
                virtualOrganizationPosition,
                principalInductionRecordId,
                principalVirtualOrganizationPosition,
                directorInductionRecordId,
                directorVirtualOrganizationPosition,
                dutyBodyId,
                dutyBodyName,
                rootTargetCategoryId,
                objectiveType,
                systemDocking,
                isReference,
                orderNumber,
                subjectLifeCycle,
                updateStatus,
                createLowerIndicator,
                principalVirtualOrgMemberId,
                directorVirtualOrgMemberId,
                isComplete,
                archivngType,
                userId,
                cyclelAlias,
                targetCycleName,
                respBodyType,
                objectiveNumber,
                isLastObjective,
                targetId,
                isUseFirstDept,
                reportObjectSetCode,
                virtualOrgId,
                isOpenCustomReport,
                targetDiagnosticValue,
                weightScore,
                weightValue,
                parentTargetCategoryId,
                deptLeaderInductionRecordId,
                deptLeaderVirtualOrganizationPosition,
                evaluationTemplateId,
                personalOrderNumber,
                operateTime,
                createTime,
                isUseBudget,
                cycleStartTime,
                cycleEndTime
        );
    }

}
